package wci.intermediate;

import java.util.ArrayList;
import java.util.Collection;

/**
 * <h1>SymTab</h1>
 *
 * <p>符号表symbol table，用来维护identifier的交叉引用信息</p>
 *
 * <p>Copyright (c) 2009 by Ronald Mak</p>
 * <p>For instructional purposes only.  No warranties.</p>
 */
public interface SymTab
{
    /**
     * <p>
     * 在程序入口Pascal处算全局符号表，层次为0，然后每个program为1.<br>
     * 每个program中的procedure/function/record等为2，依次类推
     * <p>
     * @return 当前嵌套层次
     */
    public int getNestingLevel();

    /**
     * 创建一个新的表项
     * @param name 名字
     * @return 新项
     */
    public SymTabEntry enter(String name);

    /**
     * 根据名字查找表中的某一项
     * @param name 表项名字
     * @return 现存项，如果不存在，返回null
     */
    public SymTabEntry lookup(String name);

    /**
     * @return 按字母顺序返回的所有表项
     */
    public Collection<SymTabEntry> sortedEntries();
}
